package com.jt.service;

import com.jt.vo.ImageVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Service
public class FileServiceIml  implements  FileService{

    /*封装图片路径 抽取出来
    * 本地磁盘前缀
    * */
   // private  String localDir="F:/images";   //本地磁盘前缀
    private  String localDir="/usr/local/src/images";
    private  String preURLPath="http://image.jt.com"; //网络访问域名

    /*1,校验文件上传的类型     jpg/png/gif
    * 2,应该校验文件是否为恶意程序 , 木马.exe.伪装成 jpg
    * 3.为了提交检索效率,应该分目录存储, 1.hash方式,  xx/xx/xx/xx  分布不均
    *                              2,日期格式    yyyy/MM/dd  目录不断增长
    * */

    @Override
    public ImageVO upoad(MultipartFile file) {
        //校验图片类型
        String fileName=file.getOriginalFilename();

        //字符大小写, 干扰正则判断,将所有的文件转化为小写字母
        //如果程序不满足正则条件,则用户上传的图片有问题
        fileName=fileName.toLowerCase();  //将所有文件后缀转化为小写字符
        if (!fileName.matches("^.+\\.(jpg|png|gif)$")){
            return null;
        }
        //校验是否为恶意程序 判断依据,宽度和高度
        try {
            /*该对象是用来专门操作图片的Api*/
           BufferedImage bufferedImage= ImageIO.read(file.getInputStream());
           int height = bufferedImage.getHeight();
           int  width =bufferedImage.getWidth();
           if (height==0 || width==0){
               return  null;
           }



           //3,分目录存储文件
            /*将时间之转化为特定的字符串*/
//            String localDir="F:\\images/2050/11/11";
//            String localDir="F:\\images";
           String dateDir= new SimpleDateFormat("/yyyy/MM/dd/")
                   .format(new Date());

           String dirPath= localDir+dateDir;
            File dirFile =new File(dirPath);
            System.out.println(dirPath);
            if (!dirFile.exists()){
                dirFile.mkdirs();
            }


            String uuid= UUID.randomUUID().toString().replace("-", "");
            int  index = fileName.lastIndexOf(".");
            String  fileType=fileName.substring(index);
            String realFileName= uuid+fileType;


            /*实现文件上传*/
            String  realFilePath=dirPath+realFileName;
            file.transferTo(new File(realFilePath));

            /*封装返回结果*/
            String  virtualPath =dateDir+realFileName; /*虚拟路径*/

            String urlPath=preURLPath+virtualPath;
            System.out.println( urlPath);
            ImageVO imageVO=new ImageVO();
            imageVO.setVirtualPath(virtualPath);
            imageVO.setUrlPath(urlPath);
            imageVO.setFileName(realFileName);
            return  imageVO;

        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
//        return null;
    }

    @Override
    public void deleteFilel(String virtualPath) {

        //准备文件的全路径 本地路径+ 虚拟地址
        String Path= localDir+virtualPath;
        File file=new File(Path);

        file.delete();
        //将路径封装为对象
        //实现文件删除
    }
}
